import matplotlib.pyplot as plt
import numpy as np
import time

unique_fig_num=1
# 使用时间戳确保图形编号唯一
def plot_debug(data, title=None, xlabel=None, ylabel=None):
    """
    绘制数据用于调试目的，确保完全独立于其他图形
    
    参数:
    data: 一维或二维数据
    title: 图形标题 (可选)
    xlabel: x轴标签 (可选)
    ylabel: y轴标签 (可选)
    """
    global unique_fig_num
    unique_fig_num += 1
    
    # 保存当前图形状态
    current_fig = plt.gcf().number if plt.get_fignums() else None
    
    try:
        # 创建全新的图形
        fig = plt.figure(unique_fig_num, figsize=(8, 6))
        ax = fig.add_subplot(111)
        
        # 将数据转换为numpy数组
        data_array = np.array(data)
        
        # 绘图逻辑
        if data_array.ndim == 1:
            # 一维数据
            ax.plot(data_array, marker='o', linestyle='-', markersize=4, linewidth=2)
            default_xlabel = 'Index'
            default_ylabel = 'Value'
        elif data_array.ndim == 2:
            # 二维数据
            if data_array.shape[1] >= 2:
                x_data = data_array[:, 0]
                colors = ['blue', 'red', 'green', 'orange', 'purple']
                for i in range(1, min(data_array.shape[1], len(colors) + 1)):
                    ax.plot(x_data, data_array[:, i], 
                           marker='o', linestyle='-', markersize=4, linewidth=2,
                           color=colors[i-1], label=f'Y{i}')
                default_xlabel = 'X'
                default_ylabel = 'Y'
                if data_array.shape[1] > 2:
                    ax.legend()
            else:
                # 只有一列的二维数据
                ax.plot(data_array[:, 0], marker='o', linestyle='-', markersize=4, linewidth=2)
                default_xlabel = 'Index'
                default_ylabel = 'Value'
        else:
            raise ValueError("数据维度必须是1维或2维")
        
        # 设置标题和标签
        ax.set_title(title if title else f"Debug Plot {unique_fig_num}")
        ax.set_xlabel(xlabel if xlabel else default_xlabel)
        ax.set_ylabel(ylabel if ylabel else default_ylabel)
        
        # 添加网格
        ax.grid(True, linestyle='--', alpha=0.7)
        
        # 调整布局
        plt.tight_layout()
        
        # 显示图形（非阻塞）
        plt.show(block=False)
        plt.pause(0.1)  # 短暂暂停确保图形显示
        
        # print(f"创建调试图形 #{unique_fig_num}: {title if title else '无标题'}")
        
        return fig
        
    finally:
        # 恢复原来的图形上下文
        if current_fig is not None:
            plt.figure(current_fig)
        else:
            # 如果没有之前的图形，关闭当前图形以避免冲突
            plt.close(unique_fig_num)

# 使用示例
if __name__ == "__main__":
    # 模拟其他类的图形（使用固定编号）
    plt.figure(1)  # 其他类使用的图形编号
    plt.plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25], 'ro-', linewidth=2)
    plt.title("origin")
    plt.grid(True)
    plt.draw()

    
    # 短暂暂停

    
    # 创建调试图形 - 应该使用唯一编号
    data_1d = [1, 3, 2, 4, 5, 7, 6]
    fig1 = plot_debug(data_1d, title="1d")
    

    
    # 创建另一个调试图形
    data_2d = [[1, 2, 3], [2, 3, 5], [3, 5, 8], [4, 4, 6], [5, 6, 9]]
    fig2 = plot_debug(data_2d, title="2d", xlabel="t", ylabel="y")
    

    
    # 再创建一个调试图形
    x = np.linspace(0, 2*np.pi, 20)
    y = np.sin(x)
    data_sine = np.column_stack((x, y))
    fig3 = plot_debug(data_sine, title="sine", xlabel="deg", ylabel="amp")
    plt.show()